#! /bin/bash
# =====================================
# FastAPI 任务管理脚本
# 启动、停止、重启任务
# =====================================
TASK_NAME="hunter_task"
TASK_DIR="/usr/local/pywork/hunter-ai"
# 定义虚拟环境目录
VENV_DIR="$TASK_DIR/venv"

TASK_LOG_DIR="$TASK_DIR/logs"
mkdir -p $TASK_LOG_DIR

PID_FILE="$TASK_LOG_DIR/$TASK_NAME.pid"

is_running() {
    if [ -f "$PID_FILE" ]; then
        pid=$(cat "$PID_FILE")
        if ps -p "$pid" > /dev/null 2>&1; then
            return 0
        else
            return 1
        fi
    else
        return 1
    fi
}

# 启动任务
start_task() {
    if is_running; then
        echo "$TASK_NAME 任务已启动"
        exit 0
    fi
    echo "启动 $TASK_NAME 任务..."
    source $VENV_DIR/bin/activate
    nohup $VENV_DIR/bin/python -m tasks.scheduler \
        > "$TASK_LOG_DIR/$TASK_NAME.out.log" 2> "$TASK_LOG_DIR/$TASK_NAME.err.log" &
    echo $! > "$PID_FILE"
    echo "$TASK_NAME 任务已启动, PID: $!"
}

# 停止任务
stop_task() {
    if ! is_running; then
        echo "$TASK_NAME 任务未启动"
        exit 0
    fi

    pid=$(cat "$PID_FILE")
    echo "停止 $TASK_NAME 任务(PID: $pid)..."
    kill -SIGTERM "$pid"
    sleep 2
    if ps -p "$pid" > /dev/null 2>&1; then
        echo "$TASK_NAME 任务未停止，尝试强制终止"
        kill -SIGKILL "$pid"
    fi
    rm -f "$PID_FILE"
    echo "$TASK_NAME 任务已停止"
}

restart_task() {
    echo "重启 $TASK_NAME 任务..."
    stop_task
    sleep 1
    start_task
}

status_task() {
    if is_running; then
        echo "$TASK_NAME 任务已启动"
    else
        echo "$TASK_NAME 任务未启动"
    fi
}

case $1 in
    start)
        start_task
        ;;
    stop)
        stop_task
        ;;
    restart)
        restart_task
        ;;
    status)
        status_task
        ;;
    *)
        echo "用法: $0 {start|stop|restart|status}"
        exit 1
        ;;
esac